package com.snbc.util;

import java.util.HashMap;
import java.util.Map;

public class KeyGenerate {
	// 更新后的主键方式 modify by ligang
	 public static String getKeyPrefix(String dealDate){
	 if(dealDate.length()==14){
	 StringBuilder year_mon_day=new StringBuilder(dealDate.substring(0, 8));
		 int dayOfYear = getDayOfYear(dealDate);
		 dealDate=getKeyPrefix(dayOfYear)+year_mon_day.reverse()+dealDate.substring(8);
		 return dealDate;
	 }else{
	 dealDate=new StringBuilder(dealDate).reverse().toString();
	 }
	 return dealDate;
	 }

	static Map<String, String> map1 = new HashMap<String,String>();
//	static {
//		map.put("0", "EX5");
//		map.put("1", "1r6");
//		map.put("2", "qjd");
//		map.put("3", "EBU");
//		map.put("4", "hQp");
//		map.put("5", "oMO");
//		map.put("6", "GE9");
//		map.put("7", "zJJ");
//		map.put("8", "XIW");
//		map.put("9", "rxI");
//		map.put("10", "cHm");
//		map.put("11", "a8r");
//		map.put("12", "zaO");
//		map.put("13", "k8B");
//		map.put("14", "sVT");
//		map.put("15", "Ex2");
//		map.put("16", "xhF");
//		map.put("17", "5PV");
//		map.put("18", "zzN");
//		map.put("19", "xpG");
//		map.put("20", "zWJ");
//		map.put("21", "R4o");
//		map.put("22", "uKQ");
//		map.put("23", "dyQ");
//		map.put("24", "3WY");
//		map.put("25", "4le");
//		map.put("26", "maH");
//		map.put("27", "na1");
//		map.put("28", "Fvn");
//		map.put("29", "zYw");
//		map.put("30", "6aT");
//		map.put("31", "LEj");
//		map.put("32", "EhX");
//		map.put("33", "tPe");
//		map.put("34", "lSI");
//		map.put("35", "oxh");
//		map.put("36", "u2y");
//		map.put("37", "ODj");
//		map.put("38", "Qcx");
//		map.put("39", "jVy");
//		map.put("40", "C62");
//		map.put("41", "GFf");
//		map.put("42", "BuW");
//		map.put("43", "ROV");
//		map.put("44", "0Ck");
//		map.put("45", "BsN");
//		map.put("46", "Fcj");
//		map.put("47", "4wx");
//		map.put("48", "a1z");
//		map.put("49", "6nj");
//		map.put("50", "0SB");
//		map.put("51", "3bY");
//		map.put("52", "Kky");
//		map.put("53", "ZVW");
//		map.put("54", "wD3");
//		map.put("55", "UfA");
//		map.put("56", "u4I");
//		map.put("57", "ac2");
//		map.put("58", "A85");
//		map.put("59", "Oiu");
//		map.put("60", "ujG");
//		map.put("61", "FTu");
//		map.put("62", "gLc");
//		map.put("63", "b3l");
//		map.put("64", "fHv");
//		map.put("65", "0kF");
//		map.put("66", "Rav");
//		map.put("67", "qKn");
//		map.put("68", "wXt");
//		map.put("69", "HBY");
//		map.put("70", "Z8d");
//		map.put("71", "YNp");
//		map.put("72", "ijM");
//		map.put("73", "7VO");
//		map.put("74", "UcW");
//		map.put("75", "Aje");
//		map.put("76", "GHz");
//		map.put("77", "bmP");
//		map.put("78", "Qpr");
//		map.put("79", "OZM");
//		map.put("80", "gVR");
//		map.put("81", "US4");
//		map.put("82", "NMi");
//		map.put("83", "Ip1");
//		map.put("84", "CTW");
//		map.put("85", "Inx");
//		map.put("86", "0qn");
//		map.put("87", "pkU");
//		map.put("88", "cFn");
//		map.put("89", "T2v");
//	}

	public static Map<String,String> business = new HashMap<>();
	static {
		business.put("CK","A");
		business.put("CACK","B");
		business.put("STMCK","C");

		business.put("STMQK","D");
		business.put("CAQK","E");
		business.put("QK","F");

		business.put("DEQK","G");

		business.put("SK","J");
		business.put("ATMCKHS","K");
		business.put("ATMHL","L");
		business.put("ATMQKHS","M");
		business.put("STMQKHS","N");
		business.put("STMCKHS","O");
		business.put("STMHL","P");

		business.put("HM","Q");
		business.put("ERWM","R");
		business.put("ZBLZ","S");

		business.put("STM","T");
		business.put("ATM","U");
		business.put("FK","V");

	}

//	public static String getKeyPrefix(String dealDate) {
//		if (dealDate.length() == 14) {
//			StringBuilder hour_min_sec = new StringBuilder(
//					dealDate.substring(8));
//			long year_mon_day = Long.parseLong(dealDate.substring(0, 8));
//			String prefix = (String) map
//					.get(String.valueOf(year_mon_day % 90L));
//			dealDate = prefix + hour_min_sec.reverse();
//		} else {
//			dealDate = new StringBuilder(dealDate).reverse().toString();
//		}
//		return dealDate;
//	}
	// 更新后的主键方式 modify by ligang
//	public static String getKeyPrefix(int num) {
//		num = num % 62;
//		String s = "0";
//		if (num <= 9) {
//			s = num + "";
//		} else if (num > 9 && num <= 26 + 9) {
//			s = String.valueOf((char) (num - 9 + (97 - 1)));
//		} else if (num > 26 + 9 && num <= 61) {
//			s = String.valueOf((char) (num - 35 + (65 - 1)));
//		}
//		return s;
//	}
	
//	public static String getKeyPrefix(String dealDate) {
//
//		if(dealDate.length()==14){
//
//			StringBuilder hour_min_sec=new StringBuilder(dealDate.substring(8));
//			long year_mon_day=Long.parseLong(dealDate.substring(0, 8));
//			String prefix=map.get(String.valueOf(year_mon_day%90));
//			dealDate=prefix+hour_min_sec.reverse();
//		}else{
//			dealDate=new StringBuilder(dealDate).reverse().toString();
//		}
//		int dayOfYear = Calendar.getInstance().get(Calendar.DAY_OF_YEAR);
//		return getKeyPrefix(dayOfYear);
//	}

	public static int getDayOfYear(String s){
		int[] months={31,28,31,30,31,30,31,31,30,31,30,31};
		int year= Integer.parseInt(s.substring(0,4));
		int month= Integer.parseInt(s.substring(4,6));
		int day= Integer.parseInt(s.substring(6,8));
		months[1]=(year%400==0||year%4==0&&year%100!=0) ? 29:28;//判断闰年
		int num=0;
		for(int i=1;i<month;i++)
		{ num+=months[i]; }
		return num+day;
	}

	public static int getDayOfYear(int year,int month,int day){
		int[] months={31,28,31,30,31,30,31,31,30,31,30,31};
		months[1]=(year%400==0||year%4==0&&year%100!=0) ? 29:28;//判断闰年
		int num=0;
		for(int i=1;i<month;i++)
		{ num+=months[i]; }
		return num+day;
	}


	public static String getKeyPrefix(int dayOfYear){
		byte decade = (byte)(dayOfYear / 26 + 97);
		byte unit = (byte)(dayOfYear % 26 + 97);
		byte[] bytes = {decade,unit};
		return new String(bytes);
	}

	/**
	 * a62406102102741BOC16/SNBC/S150600901056 62406102
	 * 102741BOC16/SNBC/S150600901056
	 * 
	 * @param rowkey
	 * @return
	 */
	public static String keyToBuKey(String rowkey) {
		rowkey = rowkey.substring(1);
		String date = rowkey.substring(0, 14);
		String buKey_prefix = rowkey.substring(14);
		String year_mon_day = new StringBuilder(date.substring(0, 8)).reverse()
				.toString();
		long ts = DateUtil.dateToLong(year_mon_day + date.substring(8));
		return buKey_prefix + ts;
	}

}
